LDPC error correcting codes (“LDPC codes”) can be employed by communication and/or data storage systems to detect and correct errors in data. LDPC codes may be implemented by using an encoding process at a transmitter, in which redundancy is added to data, and a decoding process at a receiver, in which the added redundancy is exploited to correct errors. The effectiveness of an LDPC code may be characterized by the number of errors per encoded data block that it is capable of correcting. For example, an LDPC code may be able to correct up to t symbol errors, wherein t is a positive integer number that depends on the length of an original data block, the length of the coded data block, and on other parameters. LDPC codes are often able to correct a large fraction the errors present in a received codeword, and this leads to improved end-to-end reliability.
LDPC codes may be decoded using iterative message passing algorithms, such as min-sum decoding algorithms or sum-product algorithms. Such algorithms may decode a received codeword using an iterative process, in which each iteration includes two update steps. In the first update step, messages may be passed from check nodes to symbol nodes, and in the second update step, messages may be passed from symbol nodes to check nodes. These two steps are generally performed sequentially, rather than in parallel to avoid memory access conflicts in the LDPC decoder architecture. Sequential processing has the drawback of reducing the decoder throughput, i.e., the amount of time the decoder requires to decode a received codeword. This reduced decoder throughput is generally undesirable. If the decoding throughput is not sufficiently large, then applications may not perform as intended or desired. An insufficient decoding throughput can lead to degraded application performance, interruptions in service while codewords are queued waiting to be decoded at the receiver, and/or a lowered data transmission rate.
Therefore, there exists a need for LDPC decoder architectures in which the decoding throughput can be increased. For example, there exists a need for decoding architectures in which the first and second steps of an iterative decoding algorithm may be run simultaneously, without degrading the error-correcting performance of the decoder. The increased decoding throughput provided by such a decoding architecture may lead to improved application performance, fewer interruptions in service, and/or larger data transmission rates.